//
//  TBBLEManager.h
//  TBSDK
//
//  Created by nexgo on 2017/9/29.
//  Copyright © 2017年 truth. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
#import "TBErrorCode.h"
#import "TBBLEDevice.h"

// 蓝牙状态
typedef enum{
    TBBLE_OPENED = 1,   // 已开启
    TBBLE_CLOSEED,  // 已关闭
    TBBLE_UNKNOW,   // 未知
} TBBLEStatus;

// 扫描模式
typedef enum{
    TBBLE_LOWPOWER = 1,   // 低功耗
    TBBLE_FAST,   // 快速(耗电)
    TBBLE_BLANCE  // 均衡
} TBBLEScanMode;

// 扫描回调
@interface TBBLEScanCB : NSObject
@property (nonatomic,copy) void(^ _Nullable onScan)(TBBLEDevice*_Nonnull);      // 扫描结果回调
@property (nonatomic,copy) void(^ _Nullable onScanFail)(TBErrorCode*_Nonnull);  // 扫描失败
@property (nonatomic,copy) void(^ _Nullable onScanOver)(void);              // 扫描结束
@end

// 连接回调
@interface TBBLEConnectCB : NSObject
@property (nonatomic,copy) void(^ _Nullable onConnect)(TBErrorCode*_Nonnull);           // 连接回调
@property (nonatomic,copy) void(^ _Nullable onManualDisConnect)(TBErrorCode*_Nonnull);  // 主动断开回调
@property (nonatomic,copy) void(^ _Nullable onDisConnect)(TBErrorCode*_Nonnull);                // 被动断开回调
@end

#define TBBLE_STATUSCHANGED @"TBBLE_STATUSCHANGED"
@interface TBBLEManager : NSObject
/**
 单例
 @return 单例
 */
+(instancetype _Nullable )getInstance;

/**
 获取蓝牙状态
 @return 蓝牙状态
 */
-(TBBLEStatus)getStatues;

/**
 开始扫描
 @param scanMode 扫描模式
 @param uuids 过滤UUID,不需要则可以填nil
 @param scanCB 扫描结果回调
 @param workTime 工作时间  工作模式为 扫描(工作时间)->停止扫描(休息时间)->扫描->停止扫描……
 @param sleepTime 休息时间
 @param workTimes 工作次数 “扫描->停止扫描” 记一次   -1为无限次
 */
-(void)startScan:(TBBLEScanMode)scanMode serviceUuids:(NSArray<CBUUID *> *_Nullable)uuids scanCB:(TBBLEScanCB*_Nonnull)scanCB workTime:(int)workTime sleepTime:(int)sleepTime workTimes:(int)workTimes;

/**
 停止扫描
 */
-(void)stopScan;

/**
 连接设备
 @param device 需要连接的设备
 @param connectCB 连接回调
 */
-(void)connect:(TBBLEDevice*_Nonnull)device connectCB:(TBBLEConnectCB*_Nonnull)connectCB;

/**
 断开设备
 @param device 需要断开的设备
 */
-(void)disConnect:(TBBLEDevice*_Nonnull)device;

@end

// 定义一个空回调
typedef void(^VoidCB)(void);



